package com.five.controller.reception;

import com.five.dao.backstage.OrderManageDao;
import com.five.dao.reception.OrderDao;
import com.five.dao.reception.ShowTypeDao;
import com.five.entity.reception.Order;
import com.five.util.LayTable;
import com.five.util.Page;
import com.five.util.TransBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @Author: 王登峰
 * @Description:
 * @Date: 2020/11/27 8:00
 */
@Controller
public class OrderController {
    @Autowired
    ShowTypeDao typeDao;
    @Autowired
    OrderDao orderDao;
    @Autowired
    OrderManageDao orderManageDao;
    @RequestMapping("/findTypeById")
    @ResponseBody
    public Map getTYpeListById(Integer typeid){
        System.out.println("findTypeById");
        Map map=new HashMap();
        List l=typeDao.getManDate(typeid);
        if(l.size()>0){
            //生成当前时间和 最大的订房时间之间的时间段
            Date date=new Date();
            String format = new SimpleDateFormat("yyyy-MM-dd").format(date);
            typeDao.getNowAndMaxBetweenTime(format,l.get(0)+"");
            //查询这个时间段之内的所有的时间
            List<Map> mapList=typeDao.getAllDate();
            System.out.println(mapList);
            //查询这个时间段之内每天预定的房间数  以及已满的时间
            Map allList=typeDao.getDateOrder(mapList,typeid);
            //将信息存到map里面然后返回个前台
            map.put("orderMess",allList);
        }else{
            //如果为空就证明还没有于预定过房间
            System.out.println("所有房间都未预定");
        }
        return map;
    }
    //增加订单
    @RequestMapping("/addorder")
    @ResponseBody
    public String addorder(Order order){
        //根据预定的入住时间和离开时间  获取这中间的日期
        orderDao.getDate(order);
        //根据插入的时间查询当前的房间
        List<Map> mapList=typeDao.getAllDate();
        System.out.println("mapList:"+mapList);
        //查询这个时间段之内每天预定的房间数  以及已满的房间数
        System.out.println("order="+order);
        Map allList=typeDao.getDateOrder(mapList,order.getRoomtype());
        System.out.println("allist"+allList);
        //如果预定的房间数大于这个剩余的房间数的最小值 就 不能预定成功
        List<Map> mapsDate  = (List<Map>)allList.get("srDate");//[{date1:1},{date2:2}]
        boolean f=true;
        System.out.println(order.getCount());
        System.out.println("mapsDate"+mapsDate);
        for (Map map : mapsDate) {
//            map里面存放的格式是  时间:数量（剩余的房间的数量）
            for (Object o : map.keySet()) {
                //o是时间
                int synum = Integer.parseInt(map.get(o)+"");
                //对比一下当前预定的数量是否>剩余的数量  如果大于就直接return 0 （不能预定）
                if(order.getCount()>synum){
                    //return "0";
                    f=false;//不能预定了
                }
            }
        }
        System.out.println(f);
        if(f){
            orderDao.addOrder(order);
            return "1";
        }else{
            //不能预定了
            return "0";
        }
    }
    @RequestMapping("/sysum")
    @ResponseBody
    public Object sysum(Order order){
        System.out.println(123+""+order);
        //根据预定的入住时间和离开时间  获取这中间的日期
        orderDao.getDate(order);
        //根据插入的时间查询当前的房间
        List<Map> mapList=typeDao.getAllDate();
        //查询这个时间段之内每天预定的房间数  以及已满的房间数
        Map allList=typeDao.getDateOrder(mapList,order.getRoomtype());
        //如果预定的房间数大于这个剩余的房间数的最小值 就 不能预定成功
        List<Map> mapsDate  = (List<Map>)allList.get("srDate");//[{date1:1},{date2:2}]
        List<Integer> sum = new ArrayList();
        for (Map map : mapsDate) {
//            map里面存放的格式是  时间:数量（剩余的房间的数量）
            for (Object o : map.keySet()) {
                //o是时间
                int synum = Integer.parseInt(map.get(o)+"");
                System.out.println(synum);
                //对比一下当前预定的数量是否>剩余的数量  如果大于就直接return 0 （不能预定）
                sum.add(synum);
            }
        }
        System.out.println(sum);
        Object[] integers = sum.toArray();
        Arrays.sort(integers);
        for(Object o:integers){
            System.out.println(o);
        }
        return integers[0];
    }

    @RequestMapping("/selectOrder")
    @ResponseBody
    public LayTable selectOder(Page page,Order order,String orderid1 ,String num1){
        List<Map> list = orderDao.selectOder(page, order);
        System.out.println("订单："+list);
        if(orderid1 != null && num1 != null){
            System.out.println(orderid1 +"{}{}0"+num1);
            int roomcount = orderManageDao.roomcount(orderid1);
            int i1 = Integer.parseInt(num1);
            int result = i1 - roomcount;
            if(result <= 0){
                orderManageDao.changeOder1(orderid1);
                list = orderDao.selectOder(page, order);
            }
        }
        int count = orderDao.count(order);
        System.out.println(list);
        List populate = TransBean.populate(Order.class, list);
        LayTable layTable = new LayTable(count,populate);
        return layTable;
    }
}
